/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Georeferenciacion;

import entities.Direccion;
import validators.*;
import entities.Prefijo;
import entities.PuntoEmergencia;
import entities.TipoVia;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.event.map.OverlaySelectEvent;
import org.primefaces.model.map.DefaultMapModel;
import org.primefaces.model.map.LatLng;
import org.primefaces.model.map.MapModel;
import org.primefaces.model.map.Marker;
import persistence.PuntoEmergenciaJpaController;

/**
 *
 * @author Felipe Duarte
 */
@ManagedBean
@ViewScoped
public class GeoreferenciaPuntosEmergencia {

    private MapModel geoModel;
    private Marker selectedPuntoEmergenciaMarker;
    private PuntoEmergenciaJpaController puntoEmergenciaJpaController = null;
    public String nombreContacto, direccion, barrio, tipoPunto;

    @PostConstruct
    private void init() {
        initControllers();
        agregarPuntoEmergencia();
    }

    public MapModel getGeoModel() {
        return geoModel;
    }

    public void setGeoModel(MapModel geoModel) {
        this.geoModel = geoModel;
    }

    private void limpiarCampos() {
        barrio = "";
        direccion = "";
        nombreContacto = "";
        tipoPunto = "";
    }

    public void overlaySelect(OverlaySelectEvent event) {
        limpiarCampos();
        selectedPuntoEmergenciaMarker = (Marker) event.getOverlay();
        PuntoEmergencia puntoEmergencia = (PuntoEmergencia) selectedPuntoEmergenciaMarker.getData();
        Direccion d = new Direccion();
        d = puntoEmergencia.getIdDireccionPuntoEmergencia();
        barrio = puntoEmergencia.getIdBarrioPuntoEmergencia().getNombreBarrio();
        direccion = d.getTipoViaIdTipoVia().getNombreTipoVia() + " " + d.getNombreViaDireccion() + " " + d.getIdPrefijo1().getNombrePrefijo() + " "
                + d.getIdPrefijo2().getNombrePrefijo() + " " + d.getNumeroViaDireccion() + " " + d.getIdPrefijo3().getNombrePrefijo() + " "
                + d.getIdPrefijo4().getNombrePrefijo() + " " + d.getNumeroPlacaDireccion() + " " + puntoEmergencia.getIdBarrioPuntoEmergencia().getIdCiudadBarrio().getNombreCiudad();
        //direccion = armarDireccion(d,puntoEmergencia);
        nombreContacto = puntoEmergencia.getNombreContactoPuntoEmergencia();
        tipoPunto = puntoEmergencia.getIdTipoPuntoEmergencia().getNombreTipoPuntoEmergencia();
    }

    public String armarDireccion(Direccion d, PuntoEmergencia puntoEmergencia) {
        String dir = "";
        if (dir != null) {
            TipoVia tipovia = d.getTipoViaIdTipoVia();
            Prefijo prefijo = d.getIdPrefijo1();
            Prefijo prefijo2 = d.getIdPrefijo2();
            Prefijo prefijo3 = d.getIdPrefijo3();
            Prefijo prefijo4 = d.getIdPrefijo4();
            dir = (tipovia != null ? tipovia.getNombreTipoVia() : " ") + " ";
            dir += (d.getNombreViaDireccion() != null ? d.getNombreViaDireccion() : " ") + " ";
            if (prefijo != null) {
                if (prefijo.getNombrePrefijo().equals("")) {
                    dir += " ";
                } else {
                    dir += prefijo.getNombrePrefijo();
                }

            } else {
                dir += " ";
            }
            if (prefijo2 != null) {
                dir += (prefijo2.getNombrePrefijo().equals(" ") ? prefijo2.getNombrePrefijo() : " ");
            } else {
                dir += " ";
            }
            dir += (d.getNumeroViaDireccion() != null ? d.getNumeroViaDireccion() : " ") + " ";

            if (prefijo3 != null) {
                dir += (prefijo3.getNombrePrefijo().equals(" ") ? prefijo3.getNombrePrefijo() : " ");
            } else {
                dir += " ";
            }
            if (prefijo4 != null) {
                dir += (prefijo4.getNombrePrefijo().equals(" ") ? prefijo4.getNombrePrefijo() : " ");
            } else {
                dir += " ";
            }
            dir += (d.getNumeroPlacaDireccion() != null ? d.getNumeroPlacaDireccion() : " ") + " ";
            if (puntoEmergencia != null) {
                if (puntoEmergencia.getIdBarrioPuntoEmergencia() != null) {
                    if (puntoEmergencia.getIdBarrioPuntoEmergencia().getIdCiudadBarrio() != null) {
                        if (puntoEmergencia.getIdBarrioPuntoEmergencia().getIdCiudadBarrio().getNombreCiudad() != null) {
                            dir += puntoEmergencia.getIdBarrioPuntoEmergencia().getIdCiudadBarrio().getNombreCiudad();
                        } else {
                            dir += " ";
                        }
                    } else {
                        dir += " ";
                    }
                } else {
                    dir += " ";
                }
            } else {
                dir += " ";
            }

        }
        Util u = new Util();
        return u.quitarEspacio(dir);
    }

    public void agregarPuntoEmergencia() {
        geoModel = new DefaultMapModel();

        if (puntoEmergenciaJpaController.findPuntosHabilitados() != null && !puntoEmergenciaJpaController.findPuntosHabilitados().isEmpty()) {
            for (int j = 0; j < puntoEmergenciaJpaController.findPuntosHabilitados().size(); j++) {
                PuntoEmergencia puntoEmergencia = puntoEmergenciaJpaController.findPuntosHabilitados().get(j);

                String imagen = "";
                if (puntoEmergencia.getIdTipoPuntoEmergencia().getIdTipoPuntoEmergencia() == 1) {
                    //PUNTO DE ACOPIO
                    imagen = "http://localhost:8080/TECHO-FFICE/resources/puntoacopio.jpg";
                }
                if (puntoEmergencia.getIdTipoPuntoEmergencia().getIdTipoPuntoEmergencia() == 2) {
                    //PUNTO DE SALUD
                    imagen = "http://localhost:8080/TECHO-FFICE/resources/salud.jpg";
                }
                if (puntoEmergencia.getIdTipoPuntoEmergencia().getIdTipoPuntoEmergencia() == 3) {
                    //PUNTO ASERRADERO
                    imagen = "http://localhost:8080/TECHO-FFICE/resources/aserradero.jpg";
                }
                if (puntoEmergencia.getIdTipoPuntoEmergencia().getIdTipoPuntoEmergencia() == 4) {
                    //PUNTO FERRETERIA
                    imagen = "http://localhost:8080/TECHO-FFICE/resources/aserradero.jpg";
                }
                if (puntoEmergencia.getIdTipoPuntoEmergencia().getIdTipoPuntoEmergencia() == 5) {
                    //PUNTO DROGUERIA
                    imagen = "http://localhost:8080/TECHO-FFICE/resources/ferreteria.jpg";
                }
                if (puntoEmergencia.getIdTipoPuntoEmergencia().getIdTipoPuntoEmergencia() == 6) {
                    //PUNTO CAI
                    imagen = "http://localhost:8080/TECHO-FFICE/resources/cai.jpg";
                }
                if (puntoEmergencia.getIdTipoPuntoEmergencia().getIdTipoPuntoEmergencia() == 7) {
                    //JAC
                    imagen = "http://localhost:8080/TECHO-FFICE/resources/jac.jpg";
                }
                if (puntoEmergencia.getIdTipoPuntoEmergencia().getIdTipoPuntoEmergencia() == 8) {
                    //PUNTO BOMBEROS
                    imagen = "http://localhost:8080/TECHO-FFICE/resources/bomberos.jpg";
                }

                Marker markerEst = new Marker(new LatLng(puntoEmergencia.getLatitudPuntoEmergencia(), puntoEmergencia.getLongitudPuntoEmergencia()),
                        puntoEmergencia.getIdBarrioPuntoEmergencia().getNombreBarrio(),
                        puntoEmergencia, imagen);
                geoModel.addOverlay(markerEst);
            }

        }
    }

    //<editor-fold defaultstate="collapsed" desc="getter´s and setter´s">
    public String getNombreContacto() {
        return nombreContacto;
    }

    public void setNombreContacto(String nombreContacto) {
        this.nombreContacto = nombreContacto;
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public String getBarrio() {
        return barrio;
    }

    public void setBarrio(String barrio) {
        this.barrio = barrio;
    }

    public String getTipoPunto() {
        return tipoPunto;
    }

    public void setTipoPunto(String tipoPunto) {
        this.tipoPunto = tipoPunto;
    }

    //</editor-fold>
    //<editor-fold defaultstate="collapsed" desc="Inicializar los controladores">
    public void initControllers() {
        FacesContext context = FacesContext.getCurrentInstance();
        puntoEmergenciaJpaController = (PuntoEmergenciaJpaController) context.getELContext().getELResolver().getValue(context.getELContext(), null, "puntoEmergenciaJpaController");

    }
//</editor-fold>
}
